package This_Super_Overload_Override;/*
 *
 * @author 陈粒
 * @version 创建时间：2021/7/6 11:27
 */

/**
 * this关键字的三个用法：
 * 一、使用this引用成员变量或叫调用当前类的属性：在一个类的方法或构造方法内部,可以使用"this.成员变量名"来引用成员变量
 * 二、使用this关键字引用构造方法,this语句只能放在构造函数中，并且放在第一句
 * 三、使用this代表自身对象(默认),表示正在调用方法的类的对象
 * 四、引用成员方法(定义在类中的方法)：在一个类的内部，成员方法之间的互相调用时也可以使用“this.方法名(参数)”来进行引用
 * 注意：this不能用在static方法中
 */
public class This {
    public static void main(String[] args) {
        new This2();//测试This2,用this关键字进行构造方法之间的调用
        System.out.println("-------------------");
        new This3();//测试This3，输出类的对象的地址
        System.out.println("-------------------");
        This4 t4 = new This4();//测试This4，在成员方法method2()里用this调用成员方法method1()
        t4.method2();//
    }
}

class This1 {
    int a;//成员变量

    //构造方法使用this访问成员变量
    public This1() {
        this.a = 100;
    }

    //一般方法使用this访问成员变量
    public void print() {
        this.a = 102;
    }
}

class This2 {
    public This2() {
        this(2);//必须放在第一行，使用this关键字调用int有参构造函数
        System.out.println("无参构造函数");
    }

    public This2(int x) {
        this(1.2f);//调用float有参构造函数
        System.out.println("int有参构造函数");
    }

    public This2(float x) {
        System.out.println("float有参构造函数");
    }
}

class This3 {
    //使用This代表自身类的对象
    public This3() {
        System.out.println("自身类的对象：" + this);
    }
}

class This4 {
    public void method1() {

        System.out.println("成员方法1");
    }

    public void method2() {
        System.out.println("成员方法2");
        this.method1();//调用成员方法method1
    }
    int a;int b;
}
